package com.liming.common.serializer;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import com.liming.common.result.LMResult;

import java.io.IOException;

/**
 * JSON序列化器，用于将LMResult对象序列化为JSON格式，在返回结果时使用。data为null时，不返回data字段。
 *
 * @author liming
 * @date 2025/1/3
 */
public class LMResultSerializer extends StdSerializer<LMResult<?>> {

    public LMResultSerializer() {
        this(null);
    }

    public LMResultSerializer(Class<LMResult<?>> t) {
        super(t);
    }

    @Override
    public void serialize(LMResult<?> value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeNumberField("code", value.getCode());
        jsonGenerator.writeStringField("message", value.getMessage());
        if (value.getData() != null) {
            jsonGenerator.writeObjectField("data", value.getData());
        }
        jsonGenerator.writeEndObject();
    }
}
